[AWS IoT Greengrass V2] ログマネージャでコンポーネントのログをCloudWatch Logsに送ってみました
1 はじめに
IoT事業部の平内(SIN)です。
AWS IoT Greengrass V2では、AWSから提供されるいくつかの事前構築済みコンポーネントがありますが、その中のログマネージャは、コンポーネントのログ収集を扱っており、設定により、出力先、サイズ、プレフィックス、CloudWatch Logsへの送信などが可能です。
今回は、ログマネージャを設定し、コンポーネント(Greengrassコア及び、作成したカスタムコンポーネント)のログをCloudWatch Logsに送信してみました。
2 デプロイ
パブリックコンポーネントからaws.greengrass.LogManagerを選択し、デプロイします。
特に何も設定しないでデプロイすると、デフォルトの設定は以下のようになっています。
logsUploaderConfigurationは、空で、periodicUploadIntervalSecだけが設定されている状態です。この場合、特に動作が変わることはありません。
$ sudo /greengrass/v2/bin/greengrass-cli component list ・・・略・・・ Component Name: aws.greengrass.LogManager Version: 2.1.3 State: RUNNING Configuration: {"logsUploaderConfiguration":{},"periodicUploadIntervalSec":300.0} ・・・略・・・
3 Greengrassコアのログ
Greengrassコアのログは、デフォルトで /greengrass/v2/logs/greengrass.log に出力されています。
$ sudo tail -f /greengrass/v2/logs/greengrass.log 2021-08-28T23:21:25.939Z [INFO] (pool-2-thread-19) com.aws.greengrass.deployment.ShadowDeploymentListener: Updated reported state for deployment. {CONFIGURATION_ARN=arn:aws:greengrass:ap-northeast-1:439028474478:configuration:thing/gg-device-001:97, status=SUCCEEDED} ・・・略・・・
このログをCloudWatch Logsに送信するためには、logsUploaderConfigurationにsystemLogsConfigurationを追加します。uploadToCloudWatchが、CloudWatch Logsに送信するかどうかのフラグです。
パラメータについては、下記にドキュメントがあります。
参考:https://docs.aws.amazon.com/greengrass/v2/developerguide/log-manager-component.html
Greengrassコアのログは、/aws/greengrass/GreengrassSystemComponent/region/Systemの下に、日付/thing/デバイス名の型で出力されます。
4 カスタムコンポーネントのログ
最初にログを出力するだけの簡単なコンポーネントを作成しました。
com.example.LogSample
import time counter = 0 while(True): print("? {}".format(counter)) counter += 1 time.sleep(5)
カスタムコンポーネントのログは、デフォルトで /greengrass/v2/logs/コンポーネント名.logに出力されます。
$ sudo tail -f /greengrass/v2/logs/com.example.LogSample.log 2021-08-28T23:41:29.001Z [INFO] (Copier) com.example.LogSample: stdout. ? 1. {scriptName=services.com.example.LogSample.lifecycle.Run, serviceName=com.example.LogSample, currentState=RUNNING} 2021-08-28T23:41:34.006Z [INFO] (Copier) com.example.LogSample: stdout. ? 2. {scriptName=services.com.example.LogSample.lifecycle.Run, serviceName=com.example.LogSample, currentState=RUNNING} 2021-08-28T23:41:39.008Z [INFO] (Copier) com.example.LogSample: stdout. ? 3. {scriptName=services.com.example.LogSample.lifecycle.Run, serviceName=com.example.LogSample, currentState=RUNNING} 2021-08-28T23:41:44.013Z [INFO] (Copier) com.example.LogSample: stdout. ? 4. {scriptName=services.com.example.LogSample.lifecycle.Run, serviceName=com.example.LogSample, currentState=RUNNING}
このログをCloudWatch Logに送るためには、aws.greengrass.LogManagerの設定でcomponentLogsConfigurationを追加します。
下記の例では、com.example.LogSample.logを追加しています。
componentLogsConfigurationでは、uploadToCloudWatchというパラメータは存在せず、ここに設定されたコンポネントは、全てCloudWatch Logsへの送信対象となります。
カスタムコンポーネントのログは、/aws/greengrass/UserComponent/region/コンポーネント名 の下に、日付/thing/デバイス名として出力されます。
5 最後に
今回は、カスタムコンポーネントであるログマネージャ(aws.greengrass.LogManager)を使用して、ログをCloudWatch Logsに送信してみました。
periodicUploadIntervalSec(ログマネージャコンポーネントがアップロードする新しいログファイルをチェックする期間(秒単位)で、300(5分)と指定していますが、アップロードのタイミングは、ちょっと違うようで、もっと時間がかかっているように感じました。
もう少し、確認を進めたいと思います。
6 参考リンク
[AWS IoT Greengrass V2] RaspberryPIにインストールしてみました
[AWS IoT Greengrass V2] RaspberryPIでコンポーネントを作成してみました
[AWS IoT Greengrass V2] クラウド側から複数のコアデバイスにコンポーネントをデプロイしてみました
[AWS IoT Greengrass V2] クラウド側からコンポーネントを削除してみました
[AWS IoT Greengrass V2] ローカルデバッグコンソール(aws.greengrass.LocalDebugConsole)を使用してみました
[AWS IoT Greengrass V2] Lambda関数(コンポーネント)をデプロイしてみました
[AWS IoT Greengrass V2] コンポーネントからIoT CoreのメッセージブローカーにPublish/Subscribeしてみました
[AWS IoT Greengrass V2] コンポーネントからシークレットマネージャにアクセスしてみました
[AWS IoT Greengrass V2] コンポーネントでコアデバイス間のPublish/Subscribeを試してみました